13. Set 和 Get 函数
Set 和 Get 函数声明
对象不能直接访问私有变量,但借助于 Set 和 Get 函数,你的对象可以访问私有变量。本课前面的 Gaussian 对象展示了具体实现方法。
以下是 set 和 get 函数的声明:
class Gaussian
{
private:
...
public:
...
void setMu(float);
void setSigma2(float);
float getMu();
float getSigma2();
....
};
这里是函数定义:
void Gaussian::setMu (float average) {
mu = average;
}
void Gaussian::setSigma2 (float sigma) {
sigma2 = sigma;
}
float Gaussian::getMu () {
return mu;
}
float Gaussian::getSigma2() {
return sigma2;
}
定义 set 或 get 函数的语法与其他类函数(除构造函数外)相同:
return datatype Classname::functionname() {
code to define the function;
}
实际上,get 和 set 函数是一种约定,而不是具有特殊语法的特殊函数。传统上,虽然没有明确要求,但我们将这些函数命名为 getVariablename() 和 setVariablename()。
你需要将 set 和 get 函数声明为公共的,这样对象就可以访问这些函数了。
矩阵类的 set 和 get 函数
继续编写你的矩阵类代码。
*使用 set 函数来修改 grid 变量。
*所有三个私有变量(gird、rows、cols)都应该有函数。
Start Quiz:
#include <iostream>
#include <vector>
#include "matrix.h"
int main () {
// TODO: Nothing to do here
return 0;
}
#include "matrix.h"
Matrix::Matrix() {
std::vector <std:: vector <float> > initial_grid (10, std::vector <float>(5, 0.5));
grid = initial_grid;
rows = initial_grid.size();
cols = initial_grid[0].size();
}
Matrix::Matrix(std::vector <std:: vector <float> > initial_grid) {
grid = initial_grid;
rows = initial_grid.size();
cols = initial_grid[0].size();
}
/*
** TODO: Define a function setGrid()
** INPUTS: a 2-D vector
** OUPUTS: void
**
** This function receives a 2-D vector reprenting a matrix, and then
** updates the grid, rows, and cols variables
**
*/
/*
** TODO: Define getGrid(), getRows(), and getCols() functions.
** INPUTS: None of these functions have inputs
** OUPUTS: Each function should return its respective variable
** For example, getRows returns the rows variable
*/
#include <vector>
class Matrix
{
private:
std::vector< std::vector<float> > grid;
std::vector<float>::size_type rows;
std::vector<float>::size_type cols;
public:
// constructor function declarations
Matrix ();
Matrix (std::vector< std::vector<float> >);
/* TODO: Declare the setGrid(), getGrid(), getRows(),
** and getCols() functions.
**
** Here are the inputs and outputs of each function:
** setGrid()
** INPUTS: 2D vector
** OUPUTS: void
**
** getGrid()
** INPUTS: void
** OUPUTS: 2D vector
**
** getRows()
** INPUTS: void
** OUTPUTS: std::vector<float>::size_type
**
** getCols()
** INPUTS: void
** OUPUTS: std::vector<float>::size_type
*/
};
matrix.h 参考答案
# include <vector>
class Matrix
{
private:
std::vector< std::vector<float> > grid;
std::vector<int>::size_type rows;
std::vector<int>::size_type cols;
public:
//构造函数
Matrix ();
Matrix (std::vector< std::vector<float> >);
// set functions
void setGrid(std::vector< std::vector<float> >);
// get functions
std::vector< std::vector<float> > getGrid();
std::vector<int>::size_type getRows();
std::vector<int>::size_type getCols();
matrix.cpp 参考答案
# include "matrix.h"
Matrix::Matrix() {
std::vector <std:: vector <float> > initial_grid (10, std::vector <float>(5, 0.5));
grid = initial_grid;
rows = initial_grid.size();
cols = initial_grid[0].size();
}
Matrix::Matrix(std::vector <std:: vector <float> > initial_grid) {
grid = initial_grid;
rows = initial_grid.size();
cols = initial_grid[0].size();
}
void Matrix::setGrid(std::vector< std::vector<float> > new_grid) {
grid = new_grid;
rows = new_grid.size();
cols = new_grid[0].size();
}
std::vector< std::vector<float> > Matrix::getGrid() {
return grid;
}
std::vector<int>::size_type Matrix::getRows() {
return rows;
}
std::vector<int>::size_type Matrix::getCols() {
return cols;
}